<?php

/**
 * wincombo actions.
 *
 * @package    SIFI
 * @subpackage wincombo
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
 */
class KernelWincomboActions extends sfActions
{
  
  /**
   * Executes index action
   *
   */
  public function executeIndex()
  {

    Propel::setLogger(sfLogger::getInstance());
    $opcion =  $this->getRequestParameter('opcion');
    $this->patron =  $this->getRequestParameter('patron');
    $class =  $this->getRequestParameter('clase');
    $join =   $this->getRequestParameter('join');  
    $order =  $this->getRequestParameter('order');
    $funcionesActualizar = $this->getRequestParameter('funcionesActualizar');
    
    if($funcionesActualizar)
    {
       $funcionesActualizar = explode( "--", $funcionesActualizar);
    }
     
    $classPeer = $class."Peer";
    
     $c = new Criteria();
     $c->setDistinct();
     
    $opciones = $this->obtenerParametros($opcion, $c);
   
    $columnas = $opciones['labels'];
    $this->columnasTabla = $opciones['camposMostrar'];
    $this->filtros = $opciones['filtros'];
    $this->label_filtro = $opciones['label_filtro'];
    $this->camposSelect = $funcionesActualizar;
    $this->camposLlave = $opciones['camposLlave'];
   // $this->order = $opciones['order'];  
    
    try 
    {
        $i=0;
        // Agrega los parametros de ordenamiento
        if($order && is_array($order))
        {
            foreach($order as $ord)
            {
                $col = explode("--", $ord); 
                
                if($col[1] == 'desc')
                {
                    $c->addDescendingOrderByColumn($col[0]);
                }else
                {
                    $c->addAscendingOrderByColumn($col[0]);
                }
            }
        }
             
        // Agrega Joins
        if($join && is_array($join))   
        { 
            foreach($join as $j)
            {
                $js = explode("--", $j);  
                $js1 = Wincombo::obtenerNombreColumnaConFormato($js[0]);
                $js2 = Wincombo::obtenerNombreColumnaConFormato($js[1]);
                $c->addJoin($js1, $js2);
            }
        }
        
        // Agrega los parametros de busqueda
        if($this->patron)
        foreach ($this->patron as $key=>$val)
        {
            if($val != '')
            {
               if(strpos($key, ".") !== false)
               {
                   $cr = explode(".", $key); 
                   if(is_array($cr) && count($cr)>1)
                   {                         
                         $col = call_user_func(array(ucfirst($cr[0])."Peer"  , 'translateFieldName'), strtolower($cr[1]), BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME);
                         $col_criterio = "$col";
                         $map =  call_user_func(array(ucfirst($cr[0])."Peer"  , 'getTableMap')); 
					    if($map)
					    {
			            	$column_map = $map->getColumn(strtoupper($cr[1]));
							if($column_map)
							{
								if(in_array( $column_map->getType(), array('INTEGER', 'BIGINT')) )
								{
									$val = $val + 0;
									eval("\$c->add(\"$col_criterio\", ".$val.");");
				
								}else
								{
									eval("\$c->add(\"$col_criterio\", \"".str_replace('*','%',$val)."\", Criteria::ILIKE);");
								}
							}
					    }                      
                        // $c->add( "$col" , $val); 
                   }       
               }else
               {
                    $col = call_user_func(array($classPeer  , 'translateFieldName'), $key, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME); 
                    $col_criterio = "$col";
		    		$map =  call_user_func(array($classPeer  , 'getTableMap')); 
				    if($map)
				    {
		            	$column_map = $map->getColumn(strtoupper($key));
						if($column_map)
						{
							if(in_array( $column_map->getType(), array('INTEGER', 'BIGINT')) )
							{
								$val = $val + 0;
								eval("\$c->add(\"$col_criterio\", ".$val.");");
			
							}else
							{
								eval("\$c->add(\"$col_criterio\", \"".str_replace('*','%',$val)."\", Criteria::ILIKE);");
							}
						}
				    }   
                }
                $i++;
            }
        }

        // prepara los parametros de busqueda para el paginador del wincombo
 	    $this->get_params = "opcion=$opcion&clase=$class&funcionesActualizar=".$this->getRequestParameter('funcionesActualizar');

        
 	    $this->get_params .= "&";
        $element = null;

        // pager
        $this->pager = new sfPropelPager("$class", 10);
        $this->pager->setCriteria($c);
        $this->pager->setPage($this->getRequestParameter('page', 1));
        $this->pager->init();
	}
    catch (Exception $e)
    {
      echo "<br>e: $e<br>";
    }

    
    $element = $this->pager->getResults();    
    $this->datosWincombo = $element;
    $this->columnasWincombo = $columnas;
  }
  
  public function obtenerParametros($opcion, &$criteria)
  {
      $opciones = array();
      switch($opcion)
      {

          case 'contrato':
              $opciones['camposLlave']  = "id";
              $opciones['camposMostrar']= array('__toString');
              $opciones['labels']       = array("#"=>'5%',"Numero Contrato"=>'90%');
              $opciones['filtros']      = array('id','KernelTercero.identificacion');
              $opciones['label_filtro'] = array('Contrato','Tercero');
              $criteria->addJoin(ContratacionContratoPeer::TERCERO_ID, KernelTerceroPeer::ID);
              break;
              
          case 'pais':
              $opciones['camposLlave']  = "id";
              $opciones['camposMostrar']= array('nombre');
              $opciones['labels']       = array("#"=>'5%',"Pais"=>'95%');
              $opciones['filtros']      = array('nombre');
              $opciones['label_filtro'] = array('Nombre');
              break;
              
          case 'departamento':
              $opciones['camposLlave']  = "id";
              $opciones['camposMostrar']= array('nombre');
              $opciones['labels']       = array("#"=>'5%',"Departamento"=>'95%');
              $opciones['filtros']      = array('nombre');
              $opciones['label_filtro'] = array('Nombre');
              break;
          
          case 'menu':
              $opciones['camposLlave']  = "id";
              $opciones['camposMostrar']= array('nombre','nivel');
              $opciones['labels']       = array("#"=>'5%',"Menu"=>'80%',"Nivel"=>'10%');
              $opciones['filtros']      = array('nombre','nivel');
              $opciones['label_filtro'] = array('Nombre','Nivel');
              break;    
          
          case 'grupo':
              $opciones['camposLlave']  = "id";            
              $opciones['camposMostrar']= array('nombre'); // Cambiar por indicesMostrar
              $opciones['labels']       = array("#"=>'5%',"Grupo"=>'95%');
              $opciones['filtros']      = array('nombre');
              $opciones['label_filtro'] = array('Grupo');
               break;  

          case 'tercero':
              $opciones['camposLlave']  = "id";            
              $opciones['camposMostrar']= array('__toString'); // Cambiar por indicesMostrar
              $opciones['labels']       = array("#"=>'5%',"Tercero"=>'950%');
              $opciones['filtros']      = array('primer_apellido','segundo_apellido');
              $opciones['label_filtro'] = array('Primer Apellido','Segundo Apellido');
               break;


          case 'vehiculo':
              $opciones['camposLlave']  = "id";            
              $opciones['camposMostrar']= array('placa'); // Cambiar por indicesMostrar
              $opciones['labels']       = array("#"=>'5%',"Placa"=>'950%');
              $opciones['filtros']      = array('placa');
              $opciones['label_filtro'] = array('Placa');
               break;

          case 'icono':
              $opciones['camposLlave']  = "id";
              $opciones['camposMostrar']= array('nombre','ubicacion', 'getImagen');
              $opciones['labels']       = array("#"=>'5%',"Icono"=>'25%',"Ubicacion"=>'45%',"Imagen"=>'25%');
              $opciones['filtros']      = array('nombre');
              $opciones['label_filtro'] = array('Icono');
              break;
          


          default:
              break;
          
      }
      return $opciones;  
      
  }
 
}
